# -*- coding=utf-8-*-
"""
@File:memory_selection
@Author:Created by Han X.Y
@Date:on 2021/8/5 15:17 
"""
"""
给定一个包含大写字母和小写字母的字符串，找到通过这些字母构造成的最长的回文串。

在构造过程中，请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:
假设字符串的长度不会超过 1010。

示例 1:

输入:
"abccccdd"

输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
"""

class Solution:
    def longestPalindrome(self, s):
        """
        构造最长回文子串
        Args:
            s:

        Returns:

        """
        #统计频数
        s_count={}
        for i in s:
            s_count[i]=s_count.get(i,0)+1

        #根据奇偶性进行统计
        odd_count=[]#奇数
        even_count=0#偶数
        for i in s_count.keys():
            if s_count[i]%2==0:
                even_count+=s_count[i]
            else:
                odd_count.append(s_count[i]-1)
        return even_count+sum(odd_count)+1 if len(odd_count)>0 else even_count

"待优化"

if __name__=='__main__':
    s='ccddd'#"abccccdd"
    S=Solution()
    print(S.longestPalindrome(s))

